package com.neu.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.neu.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;


@Schema(description = "开发因素")
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("project_rdf")
public class RDF extends BaseEntity {

    @TableId(type= IdType.ASSIGN_ID)
    private String projectId;


    private Integer SlOption;//开发语言调整因子
    private Integer DtOption;//开发团队背景调整因子
    private Float rdf;
    private int progress;//0代表未完成、1代表已完成

    public int getProgress() {
        return progress;
    }

    public void setProgress(int progress) {
        this.progress = progress;
    }
    /*
    开发语言基准：
        0.C及其他同级别语言/平台	1.5
        1.JAVA、C++、C#及其他同级别语言/平台	1.0
        2.PowerBuilder、ASP及其他同级别语言/平台	0.6
    开发团队背景基准：
        0.为本行业开发过类似的软件	0.8
        1.为其他行业开发过类似的软件，或为本行业开发过不同但相关的软件	1.0
        2.没有同类软件及本行业相关软件开发背景	1.2
     */

    public Float calcSL(int option){
        Float SL;
        switch (option){
            case 0:
                SL = 1.5F;
                break;
            case 1:
                SL = 1.0F;
                break;
            case 2:
                SL = 0.6F;
                break;
            default:
                SL = 1.0F;
        }
        return SL;
    }
    public Float calcDT(int option){
        Float DT;
        switch (option){
            case 0:
                DT = 0.8F;
                break;
            case 1:
                DT = 1.0F;
                break;
            case 2:
                DT = 1.2F;
                break;
            default:
                DT = 1.0F;
        }
        return DT;
    }

    public Float calcRDF(){
        this.rdf = calcDT(this.DtOption)*calcSL(this.SlOption);
        return this.rdf;
    }

    public Map calc(){
        Map map = new HashMap<>();
        Float SL = calcSL(this.SlOption);
        Float DT = calcDT(this.DtOption);
        map.put("SL",SL);
        map.put("DT",DT);
        map.put("RDF", calcRDF());
        System.out.println(map);
        return map;
    }

}
